home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / BG_SRC.ZIP / README.C < prev    next >
Text File  |  1995-04-20  |  24KB  |  599 lines

  1. ------------------------------------------------------------------
  2. README.C
  3.  
  4. What follows is my log of the development of BG.EXE. It was written
  5. for Borland C 3.1 running under DOS.
  6.  
  7. Feel free to copy and modify the sources on the condition that you
  8. always acknowledge the original author of the sources, Owen F.Ransen.
  9.  
  10. These sources cannot be used for commercial purposes without 
  11. permission.
  12.  
  13. -------------------------------------------------------------------
  14.  
  15. THINGS STILL TO DO:
  16.  
  17. 1) If Goodness == Best then you should make a random selection between the 2.
  18. 2) You should make the starting more realistic.
  19. 3) You MUST check the max moves possible, and not make one with less.
  20. 4) You should sort out a good text placement scheme.
  21. 5) You should ho hi-lo switch stuff.
  22.  
  23. 8th August 1991
  24.  
  25. Things going quite well but problem sometimes reentering from the bar,
  26. sometimes he doesn't even though he can, and in fact SHOULD. Trying to
  27. get over this by having a Moves_Made field in Best_Move, and using that
  28. as a high priority selector, but still does not always work.
  29.  
  30.                    -----++++***!!#!!***++++-----
  31.  
  32. I think I have got the problem, it seems to be in Select_Best_Ndice_Move().
  33. I reckon I do not handle the situation where only a single move can be made
  34. correctly.
  35.  
  36. There are two branches in that function
  37.  
  38.     if (Still dice to test and not won)
  39.         for every move which can be made
  40.            Select_Best_Ndice_Move with the next dice
  41.     else
  42.         end of recursion, evaluate the move.
  43.  
  44. The problem is that in the first branch, if no moves can be made I do not
  45. call Select_Best_Ndice_Move, and so I never evaluate the one piece move!
  46. What is happening is that I am not evaluating the leaves of the tree which
  47. use less than the maximum number of pieces. So in the first branch, if no
  48. moves have been made (there remains a piece stuck somewhere) I should
  49. recurse anyway.
  50.  
  51.     if (Still dice to test and not won)
  52.         for (every move which can be made)
  53.            Select_Best_Ndice_Move with the next dice
  54.         if (no moves made)
  55.            Select_Best_Ndice_Move with the next dice to force end
  56.            of recursion and evaluation of the move
  57.     else
  58.         end of recursion, evaluate the move.
  59.  
  60.                    -----++++***!!#!!***++++-----
  61.  
  62. Now a new problem has arisen: When bearing off I do not check that there
  63. are no pieces above me if the move would take me home.
  64.  
  65.                    -----++++***!!#!!***++++-----
  66.  
  67. Still a problem somewhere, near the end of the first game black is losing,
  68. throws a 5,4 and can move (with one piece) 5 then 4 from point1. But he
  69. only moves the 4...
  70.  
  71.                    -----++++***!!#!!***++++-----
  72.  
  73. 9th August 1991
  74.  
  75. I goddit wrong again. To get over a previous problem I had forced
  76. the recursion down branches it should not naturally go. The idea was that
  77. it would end up in the non recursing branch sooner or later. And that
  78. works except that Moves_Done was also forced, and the selection between
  79. moves was always made according to Goodness, since Moves_Done was always
  80. the same (having been forced down branches).
  81.  
  82. Now things are much more natural and neat. As soon as I get to a branch
  83. where no more moves can be made I evaluate the move, and store it in
  84. Best if it is better than the previous best. Like this if only (for example)
  85. three moves can be made, the recursion stops at the third level and
  86. evaluation takes place with 'Moves_Done' correctly reflecting the number
  87. of dice used. See Select_Best_Ndice_Move () in BG_MOVES.C for the
  88. C function. Today it seems to work ok.
  89.  
  90.                    -----++++***!!#!!***++++-----
  91.  
  92. 17th September 1991
  93.  
  94. Even the 9th August improvements were not entirely correct, though now I
  95. hope they are. I think things could be made neater by throwing away Moves_Made,
  96. since this number is implicit in the dice you are using. Or not? Ah.
  97.  
  98. Now I have written bits of code for drawing semicircles from any two points
  99. and in any direction. This will be required because I have seen that just
  100. showing piece in new positions it is hard to see where they come from. You
  101. need to see the path(s) they have taken too.
  102.  
  103. Text handling is better now. There is Side_Text function and a Help_Text
  104. function, both of which work woth both compilers, MSC was the more difficult
  105. to get going.
  106.  
  107. Now I have to record the path taken by the pieces of the best move, so that
  108. I can display the move with semicircles.
  109.  
  110.                    -----++++***!!#!!***++++-----
  111.  
  112. 18th September 1991, and now I have to record the moves made, not just the
  113. new layout. I think I will do this with
  114.  
  115. typedef struct {
  116.     Layout_t New_Layout ;     /* The new layout after the transition */
  117.     char     N_Moves ;        /* 0..4 moves to get to new layout */
  118.     char     Old_Points [4] ; /* Where the piece was */
  119.     char     Dice_Values[4] ; /* How many places moved */
  120.     char     Old_High [4] ;   /* The level of the old position of the piece */
  121. } Transition_t ;
  122.  
  123. Transitions will be passed into BG_MOVE.C functions where I used to pass
  124. New Layouts. Old_High is required so that we know where the semicircle
  125. which describes the move will start from. New_High we can get implicityly
  126. from the rest of the structure.
  127.  
  128.                    -----++++***!!#!!***++++-----
  129.  
  130. 7th October 1991, from what I can see we are always one grid space out in
  131. the y-calc for drawing the transits...
  132.  
  133. 8th October 1991. The above bug solved, I forgot that ROWS on a point start
  134. from 0, and the 1st point is on row 0, the 2nd point is on row 1 etc. I simply
  135. had to subtract 1 from the N_Pieces to calculate rows.
  136.  
  137. 3 bugs still to solve with the display of motion:
  138.     1) Sometimes the semi-circles are far to big in the y direction, even
  139.        going off the screen.
  140.     2) Movement to the bar is incorrect, it looks like I should reverse the
  141.        rows.
  142.     3) Bearing off movement is incorrect.
  143.     4) Movement from the bar back into the game is incorrect. It should be
  144.        a straight line too.
  145.     5) Get_Piece_Center only works when there is no 'squashing' to be done.
  146.  
  147.                    -----++++***!!#!!***++++-----
  148.  
  149. 10th October 1991, I have got rid of bug 1 by making the paths only slightly
  150. curved, a weighted average of the semicircle and the straight line paths.
  151.  
  152.                    -----++++***!!#!!***++++-----
  153.  
  154. 11th October 1991. I made the program smaller and got rid of the bearing off
  155. bug by making HOME the same as any other point except that a triangle
  156. is not drawn on it.
  157.  
  158. 16th October 1991. Writing the statistics in real time.
  159.  
  160. 18th October 1991. Starting to add multilanguage support in BG_MESG.C
  161. Language support is working. Now I have to think about how to adjust
  162. weights, switching types of screen and so on...
  163.  
  164. 19th October 1991. Ported latest changes to MIX-C. Found a bug in
  165. Int_Rand_Range which can go out of range sometimes. Made it recurse
  166. in those circumstances, seems to work.
  167.  
  168. 22nd October 1991. Now have a weighting menu which seems to work, though
  169. I should check that all weighting functions return a number between 0..100.
  170.  
  171. 24th October 1991. Added the setup menu and titles. Replaced Random_Score
  172. with Exiting_Score, and made Safety_Score more sensible, returning 100% if
  173. there is absolutely no danger.
  174.  
  175. There is an occasional error with an unitialised Transit... aaah
  176.  
  177. 26th October 1991.
  178.  
  179. Why does the last 10% of a release take up 90% of the effort.
  180. A word on Aspect Ratios. In the Dis_Cfg_t Aspect_V and Aspect_H are
  181. provided so that you can work out a vertical size to be the same on the
  182. screen as a horizontal size given in pixels. For example:
  183.     12 horizontal pixels is the length in centimeters as
  184.     ((12 * Aspect_V) / Aspect_H) vertical pixels.
  185.  
  186.                    -----++++***!!#!!***++++-----
  187.  
  188. 4th November 1991. I found that occasional bug. It was a set of local
  189. variables which were very occassionally, in special situations, not
  190. initialised. HINT: Initialise variables which are not OBVIOUSLY initialised
  191. in the function.
  192.  
  193. The logo drawer is struggling into life...
  194.  
  195. There are still a few problems with the graphics, for example the SETUP
  196. menu overwrites the logo area. Maybe if I just moved that menu up or
  197. down a few text rows...
  198.  
  199.                    -----++++***!!#!!***++++-----
  200.  
  201. 8th November 1991
  202.  
  203. Tidying up a few things prior to a first pre alpha alpha release. The logo
  204. is better placed now, there is space in the main menu for S.W.S. information
  205. and help, though these have not yet been implemented.
  206.  
  207.                    -----++++***!!#!!***++++-----
  208.  
  209. 21st November 1991. A pre-alpha release given to Sergio. Suggestions and
  210. things to do:
  211.     1) When assessing security of a piece consider its advancement into
  212.        the game.
  213.     2) Give partial totals (per game) as well as global totals.
  214.     3) Select the highest resolution available, but allow override too.
  215.     4) Look at the risk of being eaten when assessing the security of
  216.        a piece.
  217.  
  218.                    -----++++***!!#!!***++++-----
  219.  
  220. 30th November 1991, lets the user change the graphics mode (to a certain
  221. extent) by reading the command line. We have also got better filling of
  222. ellipses, gave problems previously with Power-C and VGA mode...
  223.  
  224.                    -----++++***!!#!!***++++-----
  225.  
  226. 28th December 1991. Now I have the Safety_Score a bity more sensible, counting
  227. only the first four pieces uncovered, since no one can eat more than that
  228. many pieces in one go!
  229.  
  230.                    -----++++***!!#!!***++++-----
  231.  
  232. 21st January 1992, a long rest, but now starting with a vengance on getting
  233. the user to play against the computer...
  234. 23rd January 1992, Get_User_Point written ok, tested ok. See BG_GRAF2.C
  235. 24th January 1992, incredible but TRUE, you are BLACK and can play against
  236.                    the computer....
  237.  
  238. 4th February 1992, added PRIMES weighting, and F9 lets you escape writing
  239. and error message into the permanently recording BG?.REC file. This is so
  240. that if you spot an error you can record it in the file.
  241.  
  242. 7th February 1992, a terrible terrible bug discovered in BG_MOVE.C. I was
  243. doing a logically wrong thing, the first part of Choose_Move should be
  244.     if (Moves_Done < Best_Score->Moves_Made) {
  245.         Copy = FALSE
  246.  
  247. but instead it was
  248.     if (Moves_Done > Best_Score->Moves_Made) {
  249.         Copy = TRUE
  250.  
  251. What an error!
  252.  
  253.                    -----++++***!!#!!***++++-----
  254.  
  255. 13th February 1992, Correcting two bugs, one is that I leave the dice list
  256. intact during his throw even if I have not been able to move, the other is
  257. that at the end game I ignore the weightings and do simple "get me off the
  258. board" selections.
  259.  
  260.                    -----++++***!!#!!***++++-----
  261.  
  262. 14th February 1992, I am having a lot of trouble with the trailing score,
  263. now I gone back to the count of the last piece.
  264.  
  265. 15th Feb 92, There was a bug when the user is taking his pieces of the board,
  266. the computer wanted that you do Max_Moves before letting you win, tho of
  267. course if you win there is no need to use all the dice available!
  268.  
  269. ANOTHER bug found. This time to do with the special cases when exiting.
  270. If I am exiting but have no pieces taken off the board then the
  271. Exiting_Score was 0, which is not very clever since then this:
  272.  
  273.     if (!Overlap(Me,Him)) {
  274.         /* The choice of move is rather simple */
  275.         if (!Bearing_Off(Me)) {
  276.             return (Trailing_Score (Me,Him)) ; /* Move closer to inner table */
  277.         } else {
  278.             return (Exiting_Score (Me,Him)) ; /* Take pieces off inner table */
  279.         }
  280.     }
  281.  
  282. does not work well in some special cases. So I have changed the calculation
  283. of exiting score to be the number of pieces at home if they are not zero,
  284. else it is the trailing score. Evaluate_Move was returning zero even though
  285. we were in the last quadrant, and this had to compete with leaving a single
  286. piece outside the last quadrant, which has a non zero score and hence this
  287. last worst position was chosen as the best...
  288.  
  289.  
  290. a good setup...
  291.     {Runners_Score,    {"RUNNERS",      "RUNNER"},       {0,50} },
  292.     {Prime_Score,      {"PRIMES",       "PRIMES"},       {0,50} },
  293.     {Safety_Score,     {"SAFETY",       "SICUREZZA"},    {0,50} },
  294.     {Aggression_Score, {"AGGRESIVENESS","AGGRESSIVITA"}, {0,30} },
  295.     {Wall_Score,       {"WALL",         "MURO"},         {0,50} },
  296.     {Agro_Coward_Score,{"HITTING SAFELY","COLPO SICURO"},{0,50} }
  297.  
  298. 29th Feb 1992, still having problems exiting well, but with the above
  299. settings the computer plays reasonably well. Now there is also the
  300. title page.
  301.  
  302. 9th March 1992, Vers 1.05:
  303.     1) Starts up with question about which video display you are using,
  304.        I had to add CGA for Liusa's bookshop.
  305.     2) 'Weights' removed from the top level menu.
  306.     3) 'Help()' function removed.
  307.     4) If mode selected is not CGA then points drawn in red and green,
  308.        else points always drawn in white.
  309.     5) Paths drawn in black or white, I no longer attempt XOR.
  310.     6) Recording the moves (always) in ready to use C-source type text,
  311.        in files like BG0.REC, BG1.REC etc.
  312.  
  313.                    -----++++***!!#!!***++++-----
  314.  
  315. 10th March 1992,Trying to improve the user interface when one of the
  316. players is totally blocked. The dice will not be thrown and a message
  317. will be given to expain why.
  318.  
  319.            -----++++***!!#!!***++++-----
  320.  
  321. 14th March 1992.
  322. 1) A bug corrected, I was breaking out of the main playing loop when I
  323.    should have been continuing! Now I do not use either 'break' or
  324.    'continue', but 'if'.
  325. 2) Enzo complained about the amount of time he had to wait when the player
  326.    had thrown a double and the computer was searching for the best move.
  327.    In fact I only needed to search for the most legal move, i.e. the move
  328.    that shifted the most pieces. Now I have added a search type which tells
  329.    the computer to stop as soon as he can if he is searching for legality
  330.    and not bestness.
  331.  
  332.            -----++++***!!#!!***++++-----
  333.  
  334. 23rd March 1992 find me trying to port the program to BORLAND.C. And here
  335. is the result so far...
  336.  
  337.            -----++++***!!#!!***++++-----
  338.  
  339. 24th March 1992, getting there, tho problems with rectangle sizes, I
  340. either erase too much or too little, I need to find out exactly what
  341. the graphics functions do...
  342.  
  343.            -----++++***!!#!!***++++-----
  344.  
  345. 4th April 1992, abandoned keeping compatibility with all three compilers,
  346. I will use only BORLAND from now on. One of the main reasons for this
  347. is that you can draw lines in XOR mode, which is very useful for showing
  348. the traces of the computers movements on the board.
  349.  
  350.            -----++++***!!#!!***++++-----
  351.  
  352. 5th April 1992, I have added three more simple score evaluators, and they
  353. make an incredible difference. It is much harder to beat the little b***rs
  354. now!
  355.  
  356.            -----++++***!!#!!***++++-----
  357.  
  358. 11th April 1992. This should be the final release apart from the
  359. text of the title page and maybe the decoding. The weights are as
  360. follows with this release, and PIERO is the best player, I beat him
  361. only 3-2, where as I have not lost a single match against all the
  362. other three players.
  363. static W_Func_t W_F_Table [N_WEIGHTS] = {
  364.     /* Function,        English,        Italian            B/W weights */
  365.     {Runners_Score,    {"RUNNERS",      "RUNNER"},       {0,60} },
  366.     {Prime_Score,      {"PRIMES",       "PRIMES"},       {0,50} },
  367.     {Safety_Score,     {"SAFETY",       "SICUREZZA"},    {0,50} },
  368.     {Aggression_Score, {"AGGRESIVENESS","AGGRESSIVITA"}, {0,60} },
  369.     {Wall_Score,       {"WALL",         "MURO"},         {0,50} },
  370.     {Agro_Coward_Score,{"HITTING SAFELY","COLPO SICURO"},{0,50} },
  371.     {Inner_Sec_Score,  {"INNER SAFETY", "COLPO SICURO"}, {0,50} },
  372.     {Outer_Sec_Score,  {"OUTER SAFETY", "COLPO SICURO"}, {0,50} },
  373.     {Trail_Sec_Score,  {"TRAIL SAFETY", "COLPO SICURO"}, {0,50} }
  374. } ;
  375.  
  376. static long Opponents [N_OPPS][N_WEIGHTS] =
  377. /*run  pri  safe  aggro wall agrwal inner outer trail */
  378. {{60,   30,   50,   60,   50,   50,   60,   20,   10},     /* PIERO */
  379.  {30,   90,   40,   75,   60,   80,   50,   50,   10},     /* PINUCCIA */
  380.  {90,   50,   60,   40,   50,   80,   50,   30,   15},     /* ALBERTO */
  381.  {99,   99,   20,   30,   30,   50,   50,   50,    0}} ;   /* LUISA */
  382.  
  383.  
  384.            -----++++***!!#!!***++++-----
  385.  
  386. 15th April 1992.
  387. What I said above about the abilities of the players is not
  388. entirely TRUE, yesterday SERGIO beat me 5-4. There is a new thing
  389. now in that the human can choose what colour he is. I am about to
  390. start working seriously on genetic selection of the players, so this
  391. is a set of sources in case of disaster...
  392.  
  393.            -----++++***!!#!!***++++-----
  394.  
  395. Serious bug found in BG_EVAL.C, I was passing OPPONENT(Human) instead
  396. of OPPONENT(*Human)!
  397.  
  398.            -----++++***!!#!!***++++-----
  399.  
  400. 25th April 1992, Version 1.0, and I'll send it to Pete in the U.S.A. to
  401. distribute to friends. Genetics works. A touch more protection. No mention
  402. of LIBRERIA ATALA, since they are not exactly moving fast... I have to
  403. write a README.1ST to explain how to use the game.
  404.  
  405.            -----++++***!!#!!***++++-----
  406.  
  407. 27th April 1992, Took the EXE to work to see what it did on other
  408. computers. It crashed. Says that
  409.         ERROR "In Show_Move, Old_Point + Moves > HOME_I."
  410. Well buggar me. It doesn't crash on my machine...
  411.  
  412.            -----++++***!!#!!***++++-----
  413.  
  414. 30th April 1992. Well, as far as I can tell it seems to be when you
  415. run it from floppy disk on an EISA machine, and maybe the mouse is not
  416. installed... I simply cannot find the problem here. Strategies:
  417.     1) Put mouse test at start of program, DONE.
  418.     2) Make a LINT file and lint the sources, NOT DONE YET.
  419.     3) Put more checks on array boundaries and so on in the sources,
  420.        DOING.
  421.     4) Add an option "qt" which allows you to run the program without
  422.        protection, but which exits before a game is complete. This
  423.        will let you check things quickly on alien machines. DOING
  424. This is version 1.02.
  425.            -----++++***!!#!!***++++-----
  426.  
  427. AAAAAAAAARRRRRRRRGGGGGGGGGHHHHHHH It could have been an unitialised ptr
  428. which LINT told me about. Good old LINT. I'll test it on Monday
  429. morning...
  430.            -----++++***!!#!!***++++-----
  431.  
  432. 2nd May 1992, general tidy up and more linting...
  433. 3rd May 1992, added the file BG_STDOP.C, which forces std opening moves...
  434.  
  435.            -----++++***!!#!!***++++-----
  436.  
  437. 10th May 1992, simple things still to do:
  438.     1) Take out SWS from main menu.
  439.     2) Let the user throw the dice.
  440.     3) See what F9 does when not debugging.
  441.  
  442.            -----++++***!!#!!***++++-----
  443.  
  444. 15th May 1992, some things to improve the game (+ those above!):
  445.     1) A new weight for occupation of the key points.
  446.     2) A new weight for unsafe eating when he has uncovered points
  447.        in his home territory
  448.     3) Improve the performance of runners when they are in a column
  449.        of 3 or more.
  450.  
  451.            -----++++***!!#!!***++++-----
  452.  
  453. 19th May 1992, changed the mouths of the faces a little bit to make the
  454. teeth a bit more obviously teeth, mouths wider, and with less teeth.
  455.  
  456.            -----++++***!!#!!***++++-----
  457.  
  458. 22nd May 1992, discovered a bug, tho don't know how long it has been there,
  459. I had left EGA_TEST defined, so some releases will never work with CGA.
  460. Now I am working on version 1.04, which has the option that the user can
  461. throw the dice manually.
  462.  
  463. It seems to work, though I have added an ugly global var called F10_Hit
  464. which is set if the user hits F10 while inputing the dice. I think this
  465. may be the tidiest way of doing things, an exception which proves the rule,
  466. and I should use that var more often, where currently I return User_Char
  467. and so on.
  468.  
  469. I have also, finally, taken out that useless S.W.S. menu option.
  470.  
  471.            -----++++***!!#!!***++++-----
  472.  
  473. 30th May 1992. Now we have colour display of board, pieces and dice,
  474. with the mono option on the command line to force a black and white
  475. only display. The text still talks about black and white, though it
  476. should talk about red and white.
  477.  
  478. I have changed the points system to calculate SIMPLE, GAMMON and BACKGAMMON
  479. winning games. The computer does not play very well now. Now there is
  480. a readout of points won instead of games won.
  481.  
  482.            -----++++***!!#!!***++++-----
  483.  
  484. 31st May 1992, version 1.07, an Italian release for Libreria Atala, but I
  485. forgot to change the default language from English to Italian. Oh well.
  486. Luisa has got the disk now...
  487.  
  488.            -----++++***!!#!!***++++-----
  489.  
  490. 5th June 1992. I've godda cod id de dose and so am staying away from
  491. work and ACAD12 drivers. This release is 1.08 and has dumping of
  492. evaluation scores at the end and a message at the end of each game
  493. which says who won and how many points he got. Not yet thouroughly
  494. tested or linted, but it seems to work...
  495.  
  496.            -----++++***!!#!!***++++-----
  497.  
  498. 28th June 1992. Vers 1.11, to be sent to Jamie and Fred, along with
  499. photos of the trip in England. In this release you can ESCAPE from
  500. the setup menmu without the changes taking effect. Also made a single
  501. file to decide if this is a ENGLISH_REL or an ITALIAN_REL. With the
  502. former the default language is English and the first screen is dedicated
  503. to me, with the latter the default language is Italian, and I share
  504. the first screen with LIBRERIA ATALA.
  505.  
  506.            -----++++***!!#!!***++++-----
  507.  
  508. 7th January 1993. I am getting the human side of doubling going. Needs
  509.     1) A place on the screen to click for the doubling.
  510.     2) A display of the current stakes.
  511.     3) The printout changed at the end of the game.
  512.  
  513.            -----++++***!!#!!***++++-----
  514.  
  515. 14th January 1993.
  516. Still working on doubling. There is a bug that drawing into the
  517. bar point destroys the doubling cube area.
  518.  
  519. Draw_Double_Cube needs to erase all three areas where the cube can be and
  520. redraw it where it has to go.
  521.  
  522. Human side of doubling done. Still have to:
  523.     1) Get computer to accept or reject.
  524.     2) Get computer to double or not.
  525.     3) Get human to accept or not.
  526.  
  527.            -----++++***!!#!!***++++-----
  528.  
  529. 22nd January 1993.
  530.  
  531. Now the human can double, the computer doubles too.
  532.     1) The human cannot yet reject.
  533.     2) The graphics get messed up.
  534.     3) The computer behaviour is not very intelligent.
  535.  
  536.                    -----++++***!!#!!***++++-----
  537.  
  538. 30th January 1993, doubling is probably ok as far as I can go in this
  539. program, ora BASTA!
  540.  
  541. 23rd January 1993.
  542.  
  543. Now the human can double, and reject, and the graphics is ok but
  544. not yet multilingual.
  545.  
  546.            -----++++***!!#!!***++++-----
  547.  
  548. What is missing still?
  549.     1) Intelligent computer doubling, accepting and rejecting.
  550.     2) Playing to a final score.
  551.     3) NOCUBE rule.
  552.  
  553. Tho this is probably releasable!
  554.  
  555.            -----++++***!!#!!***++++----
  556.  
  557. 31st December 1993.
  558.  
  559. I think I've lost a version along the way. Anyway this version does not
  560. reject the double if it is proposed early on in the game.
  561.  
  562. BUGFIX: In BG_STDOP.C the standard opening move for 5,1 was incorrect,
  563.         the move with 5 was not made.
  564.  
  565.            -----++++***!!#!!***++++----
  566.  
  567. 16th January 1994.
  568.  
  569. This release of sources is just before I start gathering statistics for the
  570. Neural Network Backgammon Brain.
  571.  
  572.            -----++++***!!#!!***++++----
  573.  
  574. 28th April 1994.
  575.  
  576. I have integrated in the neural network, and it seems to work, but it
  577. does not play very well. I need to do the following things:
  578.     0) Make Wakeup() read the limits of the input and output vectors.
  579.     1) Introduce a 5th player which is the neural network.
  580.     2) Check that the answers I get here are the same as the ones I get
  581.        when running the neural network without the back-gammon
  582.        program around it.
  583.     3) Make some other neural networks with the same data but with
  584.        more and less neurons.
  585.     4) Introduce the two new players and do a tournament again to see
  586.        who is really the best player.
  587.  
  588. 29th April 1994.
  589.  
  590. I am replacing statistical Pete (player number 3) with brainy Brian so that
  591. I can run a tournament to see if the NN player beats the others.
  592.  
  593.            -----++++***!!#!!***++++----
  594.  
  595. 14th May 1994.
  596.  
  597. I have managed to get BRIAN to run against the user and also against three
  598. other comptetitors in a tournament, but he plays very badly, I have to admit.
  599.